Computer systems are configured to include a collection of modules, components or other entities that take part in the operation of the system and that can affect its behavior in one or more ways. Such units can be considered the modules that make up the system and they are often implemented as software components. Software can be written in any of a number of programming languages and is generally used to cause a processor to execute specific instructions. However, after designing such a system it may be desirable to test or otherwise investigate one or more aspects thereof to verify whether it works, or will work, as intended.
One of the aspects that it is sometimes desirable to test is a communication between two or more components. This may be because errors or other unwanted behavior can arise in, show most apparently in, or proliferate most significantly in such portions of the system's operation. As another example, the presence or absence of a specific communication can indicate whether the system is operating as intended.